package com.example.mapper;

import com.example.entity.WorkSchedule;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 排班Mapper
 */
@Mapper
public interface WorkScheduleMapper {
    
    /**
     * 插入排班记录
     */
    int insert(WorkSchedule workSchedule);
    
    /**
     * 根据ID更新排班记录
     */
    int updateById(WorkSchedule workSchedule);
    
    /**
     * 根据ID删除排班记录（逻辑删除）
     */
    int deleteById(Long id);
    
    /**
     * 根据ID查询排班记录
     */
    WorkSchedule selectById(Long id);
    
    /**
     * 根据店长ID查询排班列表
     */
    List<WorkSchedule> selectByStoreManagerId(@Param("storeManagerId") Long storeManagerId);
    
    /**
     * 根据店长ID和星期几查询排班列表
     */
    List<WorkSchedule> selectByStoreManagerIdAndDayOfWeek(@Param("storeManagerId") Long storeManagerId, 
                                                          @Param("dayOfWeek") Integer dayOfWeek);
    
    /**
     * 检查时间段是否冲突
     */
    int checkTimeConflict(@Param("storeManagerId") Long storeManagerId, 
                         @Param("dayOfWeek") Integer dayOfWeek,
                         @Param("startHour") Integer startHour, 
                         @Param("endHour") Integer endHour,
                         @Param("excludeId") Long excludeId);
    
    /**
     * 根据店长ID、星期几和时间查询排班
     */
    WorkSchedule selectByStoreManagerIdAndTime(@Param("storeManagerId") Long storeManagerId,
                                              @Param("dayOfWeek") Integer dayOfWeek,
                                              @Param("hour") Integer hour);
    
    /**
     * 查询所有启用的排班记录
     */
    List<WorkSchedule> selectAllActiveSchedules();
    
    /**
     * 根据店长ID列表查询排班记录
     */
    List<WorkSchedule> selectByStoreManagerIds(@Param("storeManagerIds") List<Long> storeManagerIds);
} 